package com.neuedu.corejava.ch2;

public class Operate {

	public static void main(String[] args) {
		String i="hello";	
		
		//instanceof 用于判断某个对象是否是特定的数据类型，在反射或集合编程时使用
		if(i instanceof String ){
			System.out.println("i的数据类型是字符串");
		}
		
		
		
		//运算符号的优先级别
		//算术运算->连接->比较运算符->特殊运算符
		
		//  ++  和  --
		int k=2;
		k+= ++k  -  k--  *  ++k;//k+=3-3*3=-6
		//1、先算赋值符号的右边；
		//2、运算级别高的先算；
		//3、按照四则运算的顺序进行计算；
		//++k=3
		//++k=4
		//--k=3
		//3-3*3=-6
		//2  3
		//-4   -3
		System.out.println("k的值为："+k);
		
		
		// +号运算符号
		// 1、做数学运算的加法运算
		// 2、字符串连接
		int m=10;
		char c='中';
		
		//数字+字符=数字+字符的编码索引值
		int str=m+c;//自动转换：把字符char类型自动转换为int类型
		System.out.println("str是："+str);//计算结果是int类型，是数值类型
		
		String str2=""+m + c ;//字符串+任何的数值类型，会把数值转化为数值字符串，计算结果也是字符串
		System.out.println("str2是："+str2);
		
		String str3=m+c+"";//满足四则运算的规律：从左到右进行计算
		System.out.println("str3是："+str3);//计算结果是String类型，是字符串类型，对象类型
		
		String str4=m*(m+c)+c+"";//满足四则运算的规律：从左到右进行计算
		System.out.println("str4是："+str4);//计算结果是String类型，是字符串类型，对象类型
		
		//逻辑运算
		//逻辑运算的结果都是boolean值：true，false
		//比较运算符的运算结果也是boolean值
		boolean b=m*(m+c)>c*c;
		System.out.println(b);//算术运算的优先级别高于比较运算，比较运算的优先级别高于逻辑运算
		
		
		//对于复杂的表达式，需要掌握根据运算符号的优先级别进行拆分表达式，
		//按照运算级别从低到高进行拆分，运算则按照从高到低进行运算
	    b=m*(m+c)>c*c && m*(m+c)>c || m*(m+c)>c;
	    //m*(m+c)>c*c && m*(m+c)>c 和  m*(m+c)>c 看成两个整体
	    //m*(m+c)>c*c 和  m*(m+c)>c
		System.out.println(b);
		
		
		
		//逻辑运算的短路  
		//在进行逻辑或运算时，可能出现短路的现象：当有多个或运算进行串联时，会从左到右进行计算，当左边有一个表达式结果为真，右边所有的计算都被短路
		if( 2>1 || 2+3>0 && false ){
			System.out.println("大于0");
		}
		
		//在进行逻辑与运算时，也可能出现短路现象：当有多个与运算进行串联时，会从左到右进行运算，当左边有任何一个表达式结果为假时，右边所有的计算都被短路
		if( 2+3>0 && false || 2>1 ){
			System.out.println("大于0");
		}
		
		
		
		//byte,short和char进行算数运算时，会自动转换为int 类型进行计算，他们的结果是int 类型		
		byte b1=12;
		short s1=14;
		char c1='A';
		//b1=b1+s1; 算数运算后的结果是int类型，不能直接保存到byte类型中
		int i1=b1+b1;
		//s1=b1+s1; 算数运算后的结果是int类型，不能直接保存到short类型中
        //c1=c1+12; 算数运算后的结果是int类型，不能直接保存到char类型中
		
		
		
		long l1=1234;
		
		//错误int i2=i1+l1; int类型 + long类型 = long类型，小范围的数据类型与大范围的数据类型进行算术运算，会先把小范围的数据自动转换为大范围的数据，再进行运算
		l1=i1+l1; 
		
		
		//强制类型转换
		//大范围的数据转换为小范围的数据需要进行类型强制转换，小数据类型=（小数据类型）大数据值
		//数据类型强制转换会导致数据精度的损失，高数据位会全部损失掉，如果是小数转整数会把小数部分全部损失掉；
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	}

}
